/**
 * @file mmgr_file.c
 * @brief 
 * @author  ()
 * @version 1.0
 * @date 2024-09-13
 * 
 * @copyright Copyright (C) 2019 Queclink Wireless Solutions (ShenZhen) Co., Ltd. All Rights Reserved.
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date       <th>Version <th>Author  <th>Description
 * <tr><td>2024-09-13 <td>1.0     <td>     <td>内容
 * </table>
 */
#include "include/mmgr_file.h"
#include "utils/utils_timer.h"
#include "include/mmgr_log.h"

#include "cmsis_os2.h"
#include "modem/qlmodem/task_modem.h"

#define MAX_FILE_NODE (10)

typedef enum{
    FILE_INIT,
    FILE_UPLOAD,
    FILE_UPLOAD_DONE,

    // FILE_DELETE,
    // FILE_DELETE_DONE,
}file_status_e;


typedef struct {
    char    *fname;
    uint32_t fsize;
    file_status_e  fstatus;
    uint32_t timeout_sec;
}file_record_t;

/**
 * @brief 待上传文件列表
 */
file_record_t frec_table[MAX_FILE_NODE] = {
    0
};


#define mmgr_malloc(size)     pvPortMalloc(size)
#define mmgr_free(size)       vPortFree(size)
/* 证书密钥上传步骤, 上传到 modem */
typedef enum{
    UPLOAD_IDLE,
    UPLOAD_WAIT_TIME_SYNC,

    UPLOAD_FILE,
    UPLOAD_FILE_WAIT,
} upload_stage_e;


/// @brief 触发handler上传数据到modem的文件中
/// @param filename     modem中的文件名称
/// @param data_ptr     数据指针
/// @param data_size    数据大小
/// @param timeout_sec  上传超时时间
/// @return 
int32_t mmgr_file_data_upload(void *filename, uint8_t *data_ptr, uint32_t data_size, uint32_t timeout_sec)
{
    int16_t idx = -1;

    log_d("upload file :%s\r\n", filename);

    for(int16_t i = 0; i < MAX_FILE_NODE; i++)
    {
        if(frec_table[i].fstatus == FILE_INIT)
        {
            idx = i;
            break;
        }
    }

    if(idx >= 0)
    {
        frec_table[idx].fname = (char *)(mmgr_malloc(strlen((const char *)filename) + 1));
        if(NULL == frec_table[idx].fname)
        {
            log_e("filename alloc memory failed!\r\n");
            return -1;
        }

        memset(frec_table[idx].fname, 0, strlen((const char *)filename) + 1);
        snprintf(frec_table[idx].fname, strlen((const char *)filename) + 1, "%s", (const char *)filename);
        frec_table[idx].fsize = data_size;
        int32_t ret = qltask_modem_file_upload(frec_table[idx].fname, (char *)data_ptr, data_size);
        if (0 != ret)
        {
            log_e("Upload <%s> file failed! ret=%d\r\n", frec_table[idx].fname, ret);
            mmgr_free(frec_table[idx].fname);
            return -1;
        }
        else
        {
            log_d("Upload <%s> file...  size=%d\r\n", frec_table[idx].fname, data_size);
        }

        frec_table[idx].fstatus = FILE_UPLOAD;
    }

    return 0;
}


// /*************************************************************************
//  * mmgr_file_status_update
//  * 函数功能：modem 文件上传状态更新事件
//  * 输入参数：prm-0成功，负数为错误码，data-上传文件名，size-文件名长度
//  * 返 回 值：void
//  *************************************************************************/
// void mmgr_file_status_update(int prm, void *filename, size_t size)
// {
//     if (0 == prm)
//     { 
//         for(uint16_t i = 0; i < MAX_FILE_NODE; i++)
//         {
//             if(frec_table[i].fstatus == FILE_INIT)
//             {
//                 continue;
//             }

//             if(0 != strcmp(frec_table[i].fname, filename))
//             {
//                 continue;
//             }

//             frec_table[i].fstatus = FILE_UPLOAD_DONE;

//             break;
//         }
//     }
// }
